home *** CD-ROM | disk | FTP | other *** search
/ Alles Voor Internet / Tout Pour Internet / alles voor internet.iso / MacInternet™ / Telnet / NCSA / tn3270 2.3d26 source / tn3270 / crcf.c < prev    next >
Text File  |  1991-01-21  |  3KB  |  89 lines

  1. /*
  2.  *  tn3270 for the Macintosh Source Code
  3.  *  Brown University Computing and Information Services
  4.  *  Version 2.3d21, January 17, 1991
  5.  *  Copyright (c) 1988, 1989, 1990, 1991 by Brown University and by
  6.  *  Peter John DiCamillo.
  7.  *
  8.  *  Permission is granted to any individual or institution to use, copy,
  9.  *  or redistribute the binary version of this software and its
  10.  *  documentation provided this notice and the copyright notices are
  11.  *  retained.  Permission is granted to any individual or non-profit
  12.  *  institution to use, copy, modify, or redistribute the source files
  13.  *  of this software provided this notice and the copyright notices are
  14.  *  retained.  This software may not be distributed for profit, either
  15.  *  in original form or in derivative works, nor can the source be
  16.  *  distributed to other than an individual or a non-profit institution.
  17.  *  Any  individual or group interested in seeing and/or using these
  18.  *  source files but who are prevented from doing so by the above
  19.  *  constraints should contact Don Wolfe, Assistant Vice-President for
  20.  *  Computer Systems at Brown University, (401) 863-7250, for possible
  21.  *  software licensing of the source developed at Brown.
  22.  *
  23.  *  Brown University and Peter John DiCamillo make no representations
  24.  *  about the suitability of this software for any purpose.
  25.  *
  26.  *  BROWN UNIVERSITY AND PETER JOHN DICAMILLO GIVE NO WARRANTY, EITHER
  27.  *  EXPRESS OR IMPLIED, FOR THE PROGRAM AND/OR DOCUMENTATION PROVIDED,
  28.  *  INCLUDING, WITHOUT LIMITATION, WARRANTY OF MERCHANTABILITY AND
  29.  *  WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE.
  30.  *
  31.  */
  32.  
  33. crcf(str,len,initchk)
  34. char *str;
  35. short len;
  36. unsigned short initchk;
  37. {
  38. static char tabok = 0;
  39. static unsigned short crctab[256];
  40. register short i, table_pos;
  41. register unsigned short result;
  42.  
  43. if (!tabok) {
  44.     gentab(crctab);
  45.     tabok = 1;
  46.     }
  47.  
  48. result = initchk;
  49. for (i=0; i < len; i++) {
  50.     table_pos = (result ^ str[i]) & 0x00ff;
  51.     result >>= 8;
  52.     result ^= crctab[table_pos];
  53.     }
  54.  
  55. return(result);
  56. }
  57.  
  58. gentab(array)
  59. unsigned short array[256];
  60. {
  61. char x, x1, x2, x3, x4, x5, x6, x7, x8;
  62. register short count;
  63.  
  64. count = 0;
  65.  
  66. for (x8=0; x8 < 2; x8++)
  67.  for (x7=0; x7 < 2; x7++)
  68.   for (x6=0; x6 < 2; x6++)
  69.    for (x5=0; x5 < 2; x5++)
  70.     for (x4=0; x4 < 2; x4++)
  71.      for (x3=0; x3 < 2; x3++)
  72.       for (x2=0; x2 < 2; x2++)
  73.        for (x1=0; x1 < 2; x1++) {
  74.         array[count] = 0;
  75.         x = x8 ^ x7 ^ x6 ^ x5 ^ x4 ^ x3 ^ x2 ^ x1;
  76.         if (x) array[count] += 0x8000;
  77.         if (x7 ^ x6 ^ x5 ^ x4 ^ x3 ^ x2 ^ x1) array[count] += 0x4000;
  78.         if (x8 ^ x7) array[count] += 0x2000;
  79.         if (x7 ^ x6) array[count] += 0x1000;
  80.         if (x6 ^ x5) array[count] += 0x0800;
  81.         if (x5 ^ x4) array[count] += 0x0400;
  82.         if (x4 ^ x3) array[count] += 0x0200;
  83.         if (x3 ^ x2) array[count] += 0x0100;
  84.         if (x2 ^ x1) array[count] += 0x0080;
  85.         if (x1) array[count] += 0x0040;
  86.         array[count++] += x;
  87.         }
  88. }
  89.